package siga.modelo;

import java.io.*;
import java.util.*;

public class CadastrarCurso {
	public void cadastro(Curso c) throws Exception {
		TreeSet<Curso> cursos = new TreeSet<Curso>();
		Curso operacao;
		int opcao = 0;
		int numCurso = 0;
		
		FileReader fr = null;
		FileReader frd = null;
		BufferedReader br = null;
		BufferedReader brd  = null;
		FileWriter fw = null;
		FileWriter fwd = null;
		BufferedWriter bw = null;
		BufferedWriter bwd = null;
				
		Disciplina d;
		ArrayList<Disciplina> disciplinas = new ArrayList<Disciplina>();
		
		try {
			fr = new FileReader("cadastroCursos.txt");
			br = new BufferedReader(fr);
			fw = new FileWriter("cadastroCursos.txt", true);
			bw = new BufferedWriter(fw);
		} catch(FileNotFoundException fnf) {
			opcao++;
		} catch (IOException io) {}
		
		try {
			frd = new FileReader("CadastroDisciplinas.txt");
			brd = new BufferedReader(frd);
			fwd = new FileWriter("cadastroDisciplinas.txt", true);
			bwd = new BufferedWriter(fwd);
		} catch (FileNotFoundException fnf) {
			opcao++;
		}  catch (IOException io) {}
		
		switch (opcao) {
			case 0:
				String[] leitura, leituraCurso;
				try {
					String linha, linhaCurso;
					while((linhaCurso = br.readLine())!= null){
						leituraCurso = linhaCurso.split("\\|"); //separa o numero e o nome do curso;
						
						while((linha = brd.readLine()) != null ){
							leitura = linha.split("\\|"); //separa o numero do curso e a disciplina
							if(leitura[0].equals(leituraCurso[0])){ //testa se a disciplina pertence ao curso
								String nomeDisciplina = leitura[1];
								String codigoDisciplina = leitura[2];
								int creditosDisciplina = Integer.parseInt(leitura[3]);
								
								d = new Disciplina(nomeDisciplina, codigoDisciplina, creditosDisciplina);
								disciplinas.add(d);
							}
						}
						operacao = new Curso(leituraCurso[1], disciplinas);
						cursos.add(operacao);
						numCurso++;
						
						brd.close();
						frd.close();
						frd = new FileReader("CadastroDisciplinas.txt");
						brd = new BufferedReader(frd);
					}
					if(cursos.contains(c)){
						throw new Exception("Cadastro Existente.");
					}
					else{
						numCurso++;
						String entradaCurso = numCurso + "|" + c.getNome();
						bw.append(entradaCurso, 0, entradaCurso.length());
						bw.newLine();
						bw.flush();
						fw.close();
						bw.close();
						br.close();
						fr.close();
						
						if (!c.getDisciplinas().isEmpty()) {
							for (Disciplina di: c.getDisciplinas()) {
								String entrada = numCurso + "|" + di.toString();
								bwd.append(entrada,0,entrada.length());
								bwd.newLine();
							}
							bwd.flush();
							fwd.close();
							bwd.close();
							brd.close();
							frd.close();
						}
					}
				} catch (NumberFormatException e1) {}
				  catch (FileNotFoundException e1) {}
				  catch (IOException e1) {}
				break;
			case 1:
				try {
					numCurso = 0;
					cursos = new TreeSet<Curso>();
					fwd = new FileWriter("cadastroDisciplinas.txt");
					bwd = new BufferedWriter(fwd);
					frd = new FileReader("cadastroDisciplinas.txt");
					brd = new BufferedReader(frd);
					
					String linhaCurso2;
					String[] leituraCurso2;
								
					while((linhaCurso2 = br.readLine())!= null){
						leituraCurso2 = linhaCurso2.split("\\|");
						operacao = new Curso(leituraCurso2[1], disciplinas);
						cursos.add(operacao);
						numCurso++;
					}
					if(cursos.contains(c)){
						throw new Exception("Cadastro Existente.");
					}
					else{
						numCurso++;
						String entrada = numCurso + "|" + c.getNome();
						bw.append(entrada, 0, entrada.length());
						bw.newLine();
						bw.flush();
						fw.close();
						bw.close();
						
						if (!c.getDisciplinas().isEmpty()) {
							for (Disciplina di: c.getDisciplinas()) {
								String entradaDisciplina = numCurso + "|" + di.toString();
								bwd.append(entradaDisciplina,0,entradaDisciplina.length());
								bwd.newLine();
							}
							bwd.flush();
							fwd.close();
							bwd.close();
							brd.close();
							frd.close();
						}
					}
				} catch (FileNotFoundException e) {}
				  catch (IOException e) {}
				  break;
			case 2:
				String entradaCurso;
					try {
						fw = new FileWriter("cadastroCursos.txt");
						bw = new BufferedWriter(fw);
						fwd = new FileWriter("cadastroDisciplinas.txt");
						bwd = new BufferedWriter(fwd);
						
						entradaCurso = 1 + "|" + c.getNome();
						bw.append(entradaCurso, 0, entradaCurso.length());
						bw.newLine();
						bw.flush();
						fw.close();
						bw.close();
						
						if (!c.getDisciplinas().isEmpty()) {
							for (Disciplina di: c.getDisciplinas()) {
								String entrada = 1 + "|" + di.toString();
								bwd.append(entrada,0,entrada.length());
								bwd.newLine();
							}
							bwd.flush();
							fwd.close();
							bwd.close();
							break;
						}
					} catch (IOException e) {}
				break;
			default:
				break;
		}
	}
}
